The transmission of data through a noisy channel could introduce errors into the data stream. In order to reduce the amount of errors in the data sequence reconstructed after transmission through the channel, coding techniques have been developed that provide the ability to correct such errors. This is achieved usually through the addition of redundant information as part of the transmission. Here the term transmission is used broadly to include transfer of data through different types of medium. This can include communication mediums such as those used in wired, wireless, satellite, and other technologies. This can also include storage mediums such as magnetic, semiconductor, and other types of memory.
Forward error correction (FEC) allows data to be transmitted through such noisy channels by correcting providing error correction capability. Generally speaking, FEC involves encoding the source data into encoded data at the transmitter. The transmitter sends the encoded data through the noisy channel which introduces errors. At the receiver, the data received from the channel is decoded to remove errors to the extent the FEC is capable, producing a reconstructed version of the original source signal. The type of FEC coding used can greatly affect the error correction performance of the system.
Some of the most popular and powerful FEC coding techniques known today include generalized-repeat-accumulate (GRA) codes and low density parity check codes (LDPC). As is known in the art, GRA codes are characterized by the encoding steps of repeating the source data, performing an interleaving or re-ordering function, and performing an accumulation function. Also, as is known in the art, LDPC codes are characterized by a parity check matrix, often referred to as an H-matrix, which defines the encoding performed on the source signal.
GRA codes and LDPC codes have their individual advantages. Up until recently, an implementation of an FEC communication system needing to utilize the power of either GRA or LDPC codes has had to make a decision to either build the entire system around either an GRA code or an LDPC code. Such rigidity means that the specification of an FEC code design would dictate the type of code used, instead of allowing the system designer to choose the optimal types of encoding and decoding structures in either the GRA or LDPC format, based on attributes that are most important to the system. As discussed in more detail below, the GRA structure can be used to decode the LDPC encoded data using a turbo-like decoder architecture. However, if the equivalent interleaver in the GRA code leads to “clashes,” then the throughput of high-speed, parallel turbo-like decoders will suffer. Thus, there is a significant need for techniques that modify existing LDPC codes so that the number of clashes in the equivalent interleaver can be reduced while effectively maintaining performance.